{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# Supervised sentiment: overview of the Stanford Sentiment Treebank"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "__author__ = \"Christopher Potts\"\n",
    "__version__ = \"CS224u, Stanford, Fall 2020\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "-"
    }
   },
   "source": [
    "## Contents\n",
    "\n",
    "1. [Overview of this unit](#Overview-of-this-unit)\n",
    "1. [Paths through the material](#Paths-through-the-material)\n",
    "1. [Overview of this notebook](#Overview-of-this-notebook)\n",
    "1. [The complexity of sentiment analysis](#The-complexity-of-sentiment-analysis)\n",
    "1. [Set-up](#Set-up)\n",
    "1. [Data readers](#Data-readers)\n",
    "  1. [Main readers](#Main-readers)\n",
    "  1. [Methodological notes](#Methodological-notes)\n",
    "1. [Modeling the SST labels](#Modeling-the-SST-labels)\n",
    "  1. [Train label distributions](#Train-label-distributions)\n",
    "  1. [Dev label distributions](#Dev-label-distributions)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Overview of this unit\n",
    "\n",
    "We have a few inter-related goals for this unit:\n",
    "\n",
    "* Provide a basic introduction to supervised learning in the context of a problem that has long been central to academic research and industry applications: __sentiment analysis__.\n",
    "\n",
    "* Explore and evaluate a diverse array of methods for modeling sentiment:\n",
    "  * Hand-built feature functions with (mostly linear) classifiers\n",
    "  * Dense feature representations derived from VSMs as we built them in the previous unit\n",
    "  * Recurrent neural networks (RNNs)\n",
    "  * Tree-structured neural networks\n",
    "  \n",
    "* Begin discussing and implementing responsible methods for __hyperparameter optimization__ and __classifier assessment and comparison__.\n",
    "\n",
    "The unit is built around the [Stanford Sentiment Treebank (SST)](http://nlp.stanford.edu/sentiment/), a widely-used resource for evaluating supervised NLU models, and one that provides rich linguistic representations."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Paths through the material\n",
    "\n",
    "* If you're relatively new to supervised learning, we suggest studying the details of this notebook closely and following the links to [additional resources](#Additional-sentiment-resources). \n",
    "\n",
    "* If you're familiar with supervised learning, then you can focus right away on innovative feature representations and modeling. \n",
    "\n",
    "* As of this writing, the state-of-the-art for the SST seems to be around 88% accuracy for the binary problem and 48% accuracy for the five-class problem. Perhaps you can best these numbers!"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Overview of this notebook\n",
    "\n",
    "This is the first notebook in this unit. It does two things:\n",
    "\n",
    "* Introduces sentiment analysis as a task.\n",
    "* Introduces the SST and our tools for reading that corpus.    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## The complexity of sentiment analysis\n",
    "\n",
    "Sentiment analysis seems simple at first but turns out to exhibit all of the complexity of full natural language understanding. To see this, consider how your intuitions about the sentiment of the following sentences can change depending on perspective, social relationships, tone of voice, and other aspects of the context of utterance:\n",
    "\n",
    "1. There was an earthquake in LA.\n",
    "1. The team failed the physical challenge. (We win/lose!)\n",
    "1. They said it would be great. They were right/wrong.\n",
    "1. Many consider the masterpiece bewildering, boring, slow-moving or annoying.\n",
    "1. The party fat-cats are sipping their expensive, imported wines.\n",
    "1. Oh, you're terrible!\n",
    "\n",
    "SST mostly steers around these challenges by including only focused, evaluative texts (sentences from movie reviews), but you should have them in mind if you consider new domains and applications for the ideas."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Set-up\n",
    "\n",
    "*  Make sure your environment includes all the requirements for [the cs224u repository](https://github.com/cgpotts/cs224u).\n",
    "\n",
    "* If you haven't already, download [the course data](http://web.stanford.edu/class/cs224u/data/data.tgz), unpack it, and place it in the directory containing the course repository – the same directory as this notebook. (If you want to put it somewhere else, change `SST_HOME` below.)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from nltk.tree import Tree\n",
    "import os\n",
    "import pandas as pd\n",
    "import sst"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "SST_HOME = os.path.join('data', 'trees')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Data readers\n",
    "\n",
    "* The train/dev/test SST distribution contains files that are lists of trees where the part-of-speech tags have been replaced with sentiment scores `0...4`:\n",
    "  * `0` and `1` are negative labels.\n",
    "  * `2` is a neutral label.\n",
    "  * `3` and `4` are positive labels. \n",
    "\n",
    "* Our readers are iterators that yield `(tree, score)` pairs, where `tree` is an [NLTK Tree](http://www.nltk.org/_modules/nltk/tree.html) instance and `score` is a string."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Main readers\n",
    "\n",
    "We'll mainly work with `sst.train_reader` and `sst.dev_reader`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "tree, score = next(sst.train_reader(SST_HOME))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here, `score` is one of the labels. `tree` is an NLTK Tree instance. It should render pretty legibly in your browser:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "Tree('3', [Tree('2', [Tree('2', ['The']), Tree('2', ['Rock'])]), Tree('4', [Tree('3', [Tree('2', ['is']), Tree('4', [Tree('2', ['destined']), Tree('2', [Tree('2', [Tree('2', [Tree('2', [Tree('2', ['to']), Tree('2', [Tree('2', ['be']), Tree('2', [Tree('2', ['the']), Tree('2', [Tree('2', ['21st']), Tree('2', [Tree('2', [Tree('2', ['Century']), Tree('2', [\"'s\"])]), Tree('2', [Tree('3', ['new']), Tree('2', [Tree('2', ['``']), Tree('2', ['Conan'])])])])])])])]), Tree('2', [\"''\"])]), Tree('2', ['and'])]), Tree('3', [Tree('2', ['that']), Tree('3', [Tree('2', ['he']), Tree('3', [Tree('2', [\"'s\"]), Tree('3', [Tree('2', ['going']), Tree('3', [Tree('2', ['to']), Tree('4', [Tree('3', [Tree('2', ['make']), Tree('3', [Tree('3', [Tree('2', ['a']), Tree('3', ['splash'])]), Tree('2', [Tree('2', ['even']), Tree('3', ['greater'])])])]), Tree('2', [Tree('2', ['than']), Tree('2', [Tree('2', [Tree('2', [Tree('2', [Tree('1', [Tree('2', ['Arnold']), Tree('2', ['Schwarzenegger'])]), Tree('2', [','])]), Tree('2', [Tree('2', ['Jean-Claud']), Tree('2', [Tree('2', ['Van']), Tree('2', ['Damme'])])])]), Tree('2', ['or'])]), Tree('2', [Tree('2', ['Steven']), Tree('2', ['Segal'])])])])])])])])])])])])]), Tree('2', ['.'])])])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tree"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This is what it actually looks like, of course:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(Tree('3', [Tree('2', [Tree('2', ['The']), Tree('2', ['Rock'])]), Tree('4', [Tree('3', [Tree('2', ['is']), Tree('4', [Tree('2', ['destined']), Tree('2', [Tree('2', [Tree('2', [Tree('2', [Tree('2', ['to']), Tree('2', [Tree('2', ['be']), Tree('2', [Tree('2', ['the']), Tree('2', [Tree('2', ['21st']), Tree('2', [Tree('2', [Tree('2', ['Century']), Tree('2', [\"'s\"])]), Tree('2', [Tree('3', ['new']), Tree('2', [Tree('2', ['``']), Tree('2', ['Conan'])])])])])])])]), Tree('2', [\"''\"])]), Tree('2', ['and'])]), Tree('3', [Tree('2', ['that']), Tree('3', [Tree('2', ['he']), Tree('3', [Tree('2', [\"'s\"]), Tree('3', [Tree('2', ['going']), Tree('3', [Tree('2', ['to']), Tree('4', [Tree('3', [Tree('2', ['make']), Tree('3', [Tree('3', [Tree('2', ['a']), Tree('3', ['splash'])]), Tree('2', [Tree('2', ['even']), Tree('3', ['greater'])])])]), Tree('2', [Tree('2', ['than']), Tree('2', [Tree('2', [Tree('2', [Tree('2', [Tree('1', [Tree('2', ['Arnold']), Tree('2', ['Schwarzenegger'])]), Tree('2', [','])]), Tree('2', [Tree('2', ['Jean-Claud']), Tree('2', [Tree('2', ['Van']), Tree('2', ['Damme'])])])]), Tree('2', ['or'])]), Tree('2', [Tree('2', ['Steven']), Tree('2', ['Segal'])])])])])])])])])])])])]), Tree('2', ['.'])])]),)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(tree,)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here's a smaller example:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "Tree('4', [Tree('2', ['NLU']), Tree('4', [Tree('2', ['is']), Tree('4', ['enlightening'])])])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "Tree.fromstring(\"\"\"(4 (2 NLU) (4 (2 is) (4 enlightening)))\"\"\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Methodological notes\n",
    "\n",
    "* We've deliberately ignored `test` readers. We urge you not to use the `test` set until and unless you are running experiments for a final project or similar. Overuse of test-sets corrupts them, since even subtle lessons learned from those runs can be incorporated back into model-building efforts.\n",
    "\n",
    "* We actually have mixed feelings about the overuse of `dev` that might result from working with these notebooks! We've tried to encourage using just splits of the training data for assessment most of the time, with only occasionally use of `dev`. This will give you a clearer picture of how you will ultimately do on `test`; over-use of `dev` can lead to over-fitting on that particular dataset with a resulting loss of performance of `test`."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true,
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Modeling the SST labels\n",
    "\n",
    "Working with the SST involves making decisions about how to handle the raw SST labels. The interpretation of these labels is as follows ([Socher et al., sec. 3](http://www.aclweb.org/anthology/D/D13/D13-1170.pdf)):\n",
    "\n",
    "* `'0'`: very negative\n",
    "* `'1'`: negative\n",
    "* `'2'`: neutral\n",
    "* `'3'`: positive\n",
    "* `'4'`: very positive\n",
    "\n",
    "The labels look like they could be treated as totally ordered, even continuous. However, conceptually, they do not form such an order. Rather, they consist of three separate classes, with the negative and positive classes being totally ordered in opposite directions:\n",
    "\n",
    "* `'0' > '1'`: negative\n",
    "* `'2'`: neutral\n",
    "* `'4' > '3'`: positive\n",
    "\n",
    "Thus, in this notebook, we'll look mainly at binary (positive/negative) and ternary tasks.\n",
    "\n",
    "A related note: the above shows that the __fine-grained sentiment task__ for the SST is particularly punishing as usually formulated, since it ignores the partial-order structure in the categories completely. As a result, mistaking `'0'` for `'1'` is as bad as mistaking `'0'` for `'4'`, though the first error is clearly less severe than the second.\n",
    "\n",
    "The functions `sst.binary_class_func` and `sst.ternary_class_func` will convert the labels for you, and recommended usage is to use them as the `class_func` keyword argument to `train_reader` and `dev_reader`; examples below."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Train label distributions\n",
    "\n",
    "Check that these numbers all match those reported in [Socher et al. 2013, sec 5.1](http://www.aclweb.org/anthology/D/D13/D13-1170.pdf)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_labels = [y for tree, y in sst.train_reader(SST_HOME)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total train examples: 8,544\n"
     ]
    }
   ],
   "source": [
    "print(\"Total train examples: {:,}\".format(len(train_labels)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Distribution over the full label set:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3    2322\n",
       "1    2218\n",
       "2    1624\n",
       "4    1288\n",
       "0    1092\n",
       "dtype: int64"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.Series(train_labels).value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "Binary label conversion:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "binary_train_labels = [\n",
    "    y for tree, y in sst.train_reader(SST_HOME, class_func=sst.binary_class_func)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total binary train examples: 6,920\n"
     ]
    }
   ],
   "source": [
    "print(\"Total binary train examples: {:,}\".format(len(binary_train_labels)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "positive    3610\n",
       "negative    3310\n",
       "dtype: int64"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.Series(binary_train_labels).value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "Ternary label conversion:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "positive    3610\n",
       "negative    3310\n",
       "neutral     1624\n",
       "dtype: int64"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ternary_train_labels = [\n",
    "    y for tree, y in sst.train_reader(SST_HOME, class_func=sst.ternary_class_func)]\n",
    "\n",
    "pd.Series(ternary_train_labels).value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "### Dev label distributions\n",
    "\n",
    "Check that these numbers all match those reported in [Socher et al. 2013, sec 5.1](http://www.aclweb.org/anthology/D/D13/D13-1170.pdf)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "dev_labels = [y for tree, y in sst.dev_reader(SST_HOME)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total dev examples: 1,101\n"
     ]
    }
   ],
   "source": [
    "print(\"Total dev examples: {:,}\".format(len(dev_labels)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1    289\n",
       "3    279\n",
       "2    229\n",
       "4    165\n",
       "0    139\n",
       "dtype: int64"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.Series(dev_labels).value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "Binary label conversion:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "binary_dev_labels = [\n",
    "    y for tree, y in sst.dev_reader(SST_HOME, class_func=sst.binary_class_func)]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total binary dev examples: 872\n"
     ]
    }
   ],
   "source": [
    "print(\"Total binary dev examples: {:,}\".format(len(binary_dev_labels)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "positive    444\n",
       "negative    428\n",
       "dtype: int64"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.Series(binary_dev_labels).value_counts()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "Ternary label conversion:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "positive    444\n",
       "negative    428\n",
       "neutral     229\n",
       "dtype: int64"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ternary_dev_labels = [\n",
    "    y for tree, y in sst.dev_reader(SST_HOME, class_func=sst.ternary_class_func)]\n",
    "\n",
    "pd.Series(ternary_dev_labels).value_counts()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.4"
  },
  "widgets": {
   "state": {},
   "version": "1.1.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
